#include <bits/stdc++.h>
#define int long long
using namespace std;
int n, m, k;
const int maxn = 55;
const int p = 1e9 + 7;
int arr[maxn][maxn];

int dx[] = {0, 1};
int dy[] = {1, 0};
int dp[maxn][maxn][15][15];

bool legal(int x, int y){
	return x >= 1 && x <= n && y >= 1 && y <= m;
}


int dfs(int x, int y, int mx, int c){
	if (x==n&&y==m) {
		return (int) c==k;
	}
	if (dp[x][y][mx][c] != -1) {
		return dp[x][y][mx][c];
	}
	int res = 0;
	for (int i=0;i<2;i++) {
		int nx = x + dx[i];
		int ny = y + dy[i];
		if (!legal(nx, ny)) {
			// 位置不合法
			continue;
		}
		if (arr[nx][ny] > mx && c < k) {
			// 能取
			// 取
			res = (res + dfs(nx, ny, arr[nx][ny], c+1)) % p;
		}
		// 不取		
		res = (res + dfs(nx, ny, mx, c)) % p;
	}
	return dp[x][y][mx][c] = res;
}


void solve(){
	memset(dp, -1, sizeof(dp));
	cin >> n >> m >> k;
	for (int i=1;i<=n;i++) {
		for (int j=1;j<=m;j++) {
			cin >> arr[i][j];	
			arr[i][j]++;
		}
	}
	cout << (dfs(1, 1, arr[1][1], 1) + dfs(1, 1, 0, 0)) % p << '\n';
}


signed main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	solve();
	return 0;
}
